package com.anzuo.app.data.repository

import com.anzuo.app.data.model.Item
import com.anzuo.app.data.remote.ApiService
import com.anzuo.app.data.local.dao.ItemDao

/**
 * HomeRepository - 数据仓库
 * 负责协调数据源（网络、本地数据库）的数据获取
 * 
 * @param apiService 网络API服务
 * @param itemDao 本地数据库DAO
 * 
 * @author AnZuo
 * @date 2024
 */
class HomeRepository(
    private val apiService: ApiService = ApiService.create(),
    private val itemDao: ItemDao? = null
) {

    /**
     * 获取数据列表
     * 优先从本地数据库获取，如果为空则从网络获取
     */
    suspend fun getItems(): List<Item> {
        // 先从本地数据库获取
        val localItems = itemDao?.getAllItems()
        if (!localItems.isNullOrEmpty()) {
            return localItems
        }

        // 如果本地没有数据，从网络获取
        return try {
            val remoteItems = apiService.getItems()
            // 保存到本地数据库
            itemDao?.insertItems(remoteItems)
            remoteItems
        } catch (e: Exception) {
            // 网络请求失败，返回空列表或抛出异常
            emptyList()
        }
    }

    /**
     * 刷新数据
     * 强制从网络获取最新数据
     */
    suspend fun refreshItems(): List<Item> {
        return try {
            val remoteItems = apiService.getItems()
            // 更新本地数据库
            itemDao?.deleteAllItems()
            itemDao?.insertItems(remoteItems)
            remoteItems
        } catch (e: Exception) {
            throw e
        }
    }
}

